{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright 2019 The Google Research Authors.\n",
    "\n",
    "Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "you may not use this file except in compliance with the License.\n",
    "You may obtain a copy of the License at\n",
    "\n",
    "     http://www.apache.org/licenses/LICENSE-2.0\n",
    "\n",
    "Unless required by applicable law or agreed to in writing, software\n",
    "distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "See the License for the specific language governing permissions and\n",
    "limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data Valuation using DVRL\n",
    "\n",
    " * Jinsung Yoon, Sercan O Arik, Tomas Pfister, \"Data Valuation using Reinforcement Learning\", arXiv preprint arXiv:1909.11671 (2019) - https://arxiv.org/abs/1909.11671\n",
    " \n",
    "This notebook describes the user-guide of a data valuation application using \"Data Valuation using Reinforcement Learning (DVRL)\".\n",
    "\n",
    "With a small validation set, DVRL can provide computationally highly efficient and high quality ranking of data values for the training dataset.\n",
    "\n",
    "You need:\n",
    "\n",
    "**Training / Validation / Testing sets** \n",
    " * For data valuation, there is not constraint on the datasets. If you do not have a validation set, you can simply split a small portion of the training set as the validation set (we will use validation set to get performance feedback in DVRL).\n",
    " * If you have your own training / validation / testing sets, you should save those files as 'train.csv', 'valid.csv', 'test.csv' under './repo/data_files/' directory.\n",
    " * In this notebook, we use adult income dataset (https://archive.ics.uci.edu/ml/datasets/Adult) as an example."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Prerequisite\n",
    "\n",
    " * Download lightgbm package.\n",
    " * Clone https://github.com/google-research/google-research.git to the current directory."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Uses pip3 to install necessary package (lightgbm)\n",
    "!pip3 install lightgbm\n",
    "\n",
    "# Resets the IPython kernel to import the installed package.\n",
    "import IPython\n",
    "app = IPython.Application.instance()\n",
    "app.kernel.do_shutdown(True)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from git import Repo\n",
    "\n",
    "# Current working directory\n",
    "repo_dir = os.getcwd() + '/repo'\n",
    "\n",
    "if not os.path.exists(repo_dir):\n",
    "    os.makedirs(repo_dir)\n",
    "\n",
    "# Clones github repository\n",
    "if not os.listdir(repo_dir):\n",
    "    git_url = \"https://github.com/google-research/google-research.git\"\n",
    "    Repo.clone_from(git_url, repo_dir)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Necessary packages and functions call\n",
    "\n",
    " * data_loading: Data loader for tabular datasets.\n",
    " * data_preprocess: Data extraction and normalization.\n",
    " * dvrl_classification: Data valuation function for classification problem.\n",
    " * metrics: Evaluation metrics of the quality of data valuation in various metrics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import keras\n",
    "import tensorflow as tf\n",
    "import pandas as pd\n",
    "import lightgbm\n",
    "\n",
    "# Sets current directory\n",
    "os.chdir(repo_dir)\n",
    "\n",
    "from dvrl.data_loading import load_tabular_data, preprocess_data\n",
    "from dvrl import dvrl\n",
    "from dvrl.dvrl_metrics import remove_high_low"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data loading\n",
    "\n",
    " * Create training, validation and testing sets and save them as train.csv, valid.csv, test.csv under './repo/data_files/ directory.\n",
    " * If you have your own train.csv, valid.csv, test.csv, just save them '.repo/data_files/' directory and you can skip this cell."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Data name: 'adult' in this notebook\n",
    "data_name = 'adult'\n",
    "\n",
    "# The number of training and validation samples\n",
    "dict_no = dict()\n",
    "dict_no['train'] = 1000\n",
    "dict_no['valid'] = 400\n",
    "\n",
    "# Loads data\n",
    "_ = load_tabular_data(data_name, dict_no, 0.0)\n",
    "\n",
    "print('Finished data loading.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data preprocessing\n",
    "\n",
    " * Extract features and labels from train.csv, valid.csv, test.csv in './repo/data_files/' directory.\n",
    " * Normalize the features of training, validation, and testing sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finished data preprocess.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/google/home/jinsungyoon/anaconda3/lib/python3.7/site-packages/sklearn/preprocessing/data.py:334: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by MinMaxScaler.\n",
      "  return self.partial_fit(X, y)\n"
     ]
    }
   ],
   "source": [
    "# Normalization methods: either 'minmax' or 'standard'\n",
    "normalization = 'minmax' \n",
    "\n",
    "# Extracts features and labels. Then, normalizes features.\n",
    "x_train, y_train, x_valid, y_valid, x_test, y_test, col_names = \\\n",
    "preprocess_data(normalization, 'train.csv', 'valid.csv', 'test.csv')\n",
    "\n",
    "print('Finished data preprocess.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run DVRL\n",
    "\n",
    "1. **Input**: \n",
    "\n",
    " * data valuator network parameters: Set network parameters of data valuator.\n",
    " * pred_model: The predictor model that maps output from the input. Any machine learning model (e.g. a neural network or ensemble decision tree) can be used as the predictor model, as long as it has fit, and predict (for regression)/predict_proba (for classification) as its subfunctions. Fit can be implemented using multiple backpropagation iterations.\n",
    " \n",
    " \n",
    "2. **Output**:\n",
    " * data_valuator: Data value estimator function that can return the estimate data values for each sample.\n",
    " * dvrl_predictor: Function that predicts labels of the testing samples.\n",
    " * dve_out: Estimated data values of the entire training samples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/google/home/jinsungyoon/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n",
      "WARNING:tensorflow:From /usr/local/google/home/jinsungyoon/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use tf.cast instead.\n",
      "\n",
      "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
      "For more information, please see:\n",
      "  * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
      "  * https://github.com/tensorflow/addons\n",
      "If you depend on functionality not listed there, please file an issue.\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 2000/2000 [32:09<00:00,  1.40it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finished dvrl training.\n",
      "WARNING:tensorflow:From /usr/local/google/home/jinsungyoon/anaconda3/lib/python3.7/site-packages/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./tmp/model.ckpt\n",
      "Finished data valuation.\n"
     ]
    }
   ],
   "source": [
    "# Resets the graph\n",
    "tf.reset_default_graph()\n",
    "keras.backend.clear_session()\n",
    "  \n",
    "# Defines problem\n",
    "problem = 'classification'\n",
    "\n",
    "# Network parameters\n",
    "parameters = dict()\n",
    "parameters['hidden_dim'] = 100\n",
    "parameters['comb_dim'] = 10\n",
    "parameters['iterations'] = 2000\n",
    "parameters['activation'] = tf.nn.relu\n",
    "parameters['inner_iterations'] = 100\n",
    "parameters['layer_number'] = 5\n",
    "parameters['batch_size'] = 2000\n",
    "parameters['batch_size_predictor'] = 256\n",
    "parameters['learning_rate'] = 0.01\n",
    "\n",
    "# Defines predictive model\n",
    "pred_model = keras.models.Sequential()\n",
    "pred_model.add(keras.layers.Dense(parameters['hidden_dim'], activation='relu'))\n",
    "pred_model.add(keras.layers.Dense(parameters['hidden_dim'], activation='relu'))\n",
    "pred_model.add(keras.layers.Dense(2, activation='softmax'))\n",
    "pred_model.compile(optimizer='adam', loss='categorical_crossentropy',\n",
    "                   metrics=['accuracy'])\n",
    "\n",
    "# Sets checkpoint file name\n",
    "checkpoint_file_name = './tmp/model.ckpt'\n",
    "\n",
    "# Flags for using stochastic gradient descent / pre-trained model\n",
    "flags = {'sgd': True, 'pretrain': False}\n",
    "\n",
    "# Initializes DVRL\n",
    "dvrl_class = dvrl.Dvrl(x_train, y_train, x_valid, y_valid,\n",
    "                       problem, pred_model, parameters, checkpoint_file_name, flags)\n",
    "\n",
    "# Trains DVRL\n",
    "dvrl_class.train_dvrl('auc')\n",
    "\n",
    "print('Finished dvrl training.')\n",
    "\n",
    "# Estimates data values\n",
    "dve_out = dvrl_class.data_valuator(x_train, y_train)\n",
    "\n",
    "# Predicts with DVRL\n",
    "y_test_hat = dvrl_class.dvrl_predictor(x_test)\n",
    "\n",
    "print('Finished data valuation.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluations\n",
    "\n",
    " * In this notebook, we use LightGBM as the predictor model in DVRL (but we can also replace it with another model for evaluation purposes).\n",
    " * Here, we use average accuracy as the performance metric but you can replace it with other metrics such as AUC."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Data valuation\n",
    "DVRL learns the value of each training sample (individually) with a small validation set via reinforcement learning. Therefore, DVRL can provide the ranking of the training samples based on the estimated values of training samples.\n",
    "\n",
    "* sorted_idx: Sorted training sample index based on the estimated data values by DVRL (decreasing order).\n",
    "* sorted_x_train: Sorted training features based on the estimated data values by DVRL (decreasing order).\n",
    "* sorted_y_train: Sorted training labels based on the estimated data values by DVRL (decreasing order)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Indices of top 5 high valued samples: [499 597 598 603 604]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>EducationNum</th>\n",
       "      <th>CapitalGain</th>\n",
       "      <th>CapitalLoss</th>\n",
       "      <th>HoursPerWeek</th>\n",
       "      <th>WorkClass_ ?</th>\n",
       "      <th>WorkClass_ Federal-gov</th>\n",
       "      <th>WorkClass_ Local-gov</th>\n",
       "      <th>WorkClass_ Never-worked</th>\n",
       "      <th>...</th>\n",
       "      <th>NativeCountry_ Portugal</th>\n",
       "      <th>NativeCountry_ Puerto-Rico</th>\n",
       "      <th>NativeCountry_ Scotland</th>\n",
       "      <th>NativeCountry_ South</th>\n",
       "      <th>NativeCountry_ Taiwan</th>\n",
       "      <th>NativeCountry_ Thailand</th>\n",
       "      <th>NativeCountry_ Trinadad&amp;Tobago</th>\n",
       "      <th>NativeCountry_ United-States</th>\n",
       "      <th>NativeCountry_ Vietnam</th>\n",
       "      <th>NativeCountry_ Yugoslavia</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.589041</td>\n",
       "      <td>0.062189</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.072981</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.602041</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.424658</td>\n",
       "      <td>0.131210</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.150242</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.397959</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.013699</td>\n",
       "      <td>0.114985</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.091837</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.164384</td>\n",
       "      <td>0.080705</td>\n",
       "      <td>0.533333</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.397959</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.082192</td>\n",
       "      <td>0.116502</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.397959</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 108 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        Age    fnlwgt  EducationNum  CapitalGain  CapitalLoss  HoursPerWeek  \\\n",
       "0  0.589041  0.062189      0.800000     0.072981          0.0      0.602041   \n",
       "1  0.424658  0.131210      0.866667     0.150242          0.0      0.397959   \n",
       "2  0.013699  0.114985      0.400000     0.000000          0.0      0.091837   \n",
       "3  0.164384  0.080705      0.533333     0.000000          0.0      0.397959   \n",
       "4  0.082192  0.116502      0.800000     0.000000          0.0      0.397959   \n",
       "\n",
       "   WorkClass_ ?  WorkClass_ Federal-gov  WorkClass_ Local-gov  \\\n",
       "0           0.0                     0.0                   0.0   \n",
       "1           0.0                     0.0                   0.0   \n",
       "2           0.0                     0.0                   0.0   \n",
       "3           0.0                     0.0                   0.0   \n",
       "4           0.0                     0.0                   0.0   \n",
       "\n",
       "   WorkClass_ Never-worked  ...  NativeCountry_ Portugal  \\\n",
       "0                      0.0  ...                      0.0   \n",
       "1                      0.0  ...                      0.0   \n",
       "2                      0.0  ...                      0.0   \n",
       "3                      0.0  ...                      0.0   \n",
       "4                      0.0  ...                      0.0   \n",
       "\n",
       "   NativeCountry_ Puerto-Rico  NativeCountry_ Scotland  NativeCountry_ South  \\\n",
       "0                         0.0                      0.0                   0.0   \n",
       "1                         0.0                      0.0                   0.0   \n",
       "2                         0.0                      0.0                   0.0   \n",
       "3                         0.0                      0.0                   0.0   \n",
       "4                         0.0                      0.0                   0.0   \n",
       "\n",
       "   NativeCountry_ Taiwan  NativeCountry_ Thailand  \\\n",
       "0                    0.0                      0.0   \n",
       "1                    0.0                      0.0   \n",
       "2                    0.0                      0.0   \n",
       "3                    0.0                      0.0   \n",
       "4                    0.0                      0.0   \n",
       "\n",
       "   NativeCountry_ Trinadad&Tobago  NativeCountry_ United-States  \\\n",
       "0                             0.0                           1.0   \n",
       "1                             0.0                           1.0   \n",
       "2                             0.0                           1.0   \n",
       "3                             0.0                           1.0   \n",
       "4                             0.0                           1.0   \n",
       "\n",
       "   NativeCountry_ Vietnam  NativeCountry_ Yugoslavia  \n",
       "0                     0.0                        0.0  \n",
       "1                     0.0                        0.0  \n",
       "2                     0.0                        0.0  \n",
       "3                     0.0                        0.0  \n",
       "4                     0.0                        0.0  \n",
       "\n",
       "[5 rows x 108 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Data valuation\n",
    "sorted_idx = np.argsort(-dve_out)\n",
    "sorted_x_train = x_train[sorted_idx]\n",
    "sorted_y_train = y_train[sorted_idx]\n",
    "\n",
    "# The number of examples\n",
    "n_exp = 5\n",
    "\n",
    "# Indices of top n high valued samples\n",
    "print('Indices of top ' + str(n_exp) + ' high valued samples: ' + str(sorted_idx[:n_exp]))\n",
    "pd.DataFrame(data=sorted_x_train[:n_exp, :], index=range(n_exp), columns=col_names).head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Indices of top 5 low valued samples: [330  94 770 191  16]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>EducationNum</th>\n",
       "      <th>CapitalGain</th>\n",
       "      <th>CapitalLoss</th>\n",
       "      <th>HoursPerWeek</th>\n",
       "      <th>WorkClass_ ?</th>\n",
       "      <th>WorkClass_ Federal-gov</th>\n",
       "      <th>WorkClass_ Local-gov</th>\n",
       "      <th>WorkClass_ Never-worked</th>\n",
       "      <th>...</th>\n",
       "      <th>NativeCountry_ Portugal</th>\n",
       "      <th>NativeCountry_ Puerto-Rico</th>\n",
       "      <th>NativeCountry_ Scotland</th>\n",
       "      <th>NativeCountry_ South</th>\n",
       "      <th>NativeCountry_ Taiwan</th>\n",
       "      <th>NativeCountry_ Thailand</th>\n",
       "      <th>NativeCountry_ Trinadad&amp;Tobago</th>\n",
       "      <th>NativeCountry_ United-States</th>\n",
       "      <th>NativeCountry_ Vietnam</th>\n",
       "      <th>NativeCountry_ Yugoslavia</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.602740</td>\n",
       "      <td>0.099137</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.316327</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.575342</td>\n",
       "      <td>0.172894</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.153061</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.095890</td>\n",
       "      <td>0.047316</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.295918</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.410959</td>\n",
       "      <td>0.099326</td>\n",
       "      <td>0.533333</td>\n",
       "      <td>0.140841</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.377551</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.260274</td>\n",
       "      <td>0.219071</td>\n",
       "      <td>0.733333</td>\n",
       "      <td>0.143441</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.397959</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 108 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        Age    fnlwgt  EducationNum  CapitalGain  CapitalLoss  HoursPerWeek  \\\n",
       "0  0.602740  0.099137      0.400000     0.000000          0.0      0.316327   \n",
       "1  0.575342  0.172894      0.600000     0.000000          0.0      0.153061   \n",
       "2  0.095890  0.047316      0.600000     0.000000          0.0      0.295918   \n",
       "3  0.410959  0.099326      0.533333     0.140841          0.0      0.377551   \n",
       "4  0.260274  0.219071      0.733333     0.143441          0.0      0.397959   \n",
       "\n",
       "   WorkClass_ ?  WorkClass_ Federal-gov  WorkClass_ Local-gov  \\\n",
       "0           0.0                     0.0                   0.0   \n",
       "1           0.0                     0.0                   0.0   \n",
       "2           0.0                     0.0                   0.0   \n",
       "3           0.0                     0.0                   0.0   \n",
       "4           0.0                     0.0                   0.0   \n",
       "\n",
       "   WorkClass_ Never-worked  ...  NativeCountry_ Portugal  \\\n",
       "0                      0.0  ...                      0.0   \n",
       "1                      0.0  ...                      0.0   \n",
       "2                      0.0  ...                      0.0   \n",
       "3                      0.0  ...                      0.0   \n",
       "4                      0.0  ...                      0.0   \n",
       "\n",
       "   NativeCountry_ Puerto-Rico  NativeCountry_ Scotland  NativeCountry_ South  \\\n",
       "0                         0.0                      0.0                   0.0   \n",
       "1                         0.0                      0.0                   0.0   \n",
       "2                         0.0                      0.0                   0.0   \n",
       "3                         0.0                      0.0                   0.0   \n",
       "4                         0.0                      0.0                   0.0   \n",
       "\n",
       "   NativeCountry_ Taiwan  NativeCountry_ Thailand  \\\n",
       "0                    0.0                      0.0   \n",
       "1                    0.0                      0.0   \n",
       "2                    0.0                      0.0   \n",
       "3                    0.0                      0.0   \n",
       "4                    0.0                      0.0   \n",
       "\n",
       "   NativeCountry_ Trinadad&Tobago  NativeCountry_ United-States  \\\n",
       "0                             0.0                           1.0   \n",
       "1                             0.0                           1.0   \n",
       "2                             0.0                           1.0   \n",
       "3                             0.0                           1.0   \n",
       "4                             0.0                           0.0   \n",
       "\n",
       "   NativeCountry_ Vietnam  NativeCountry_ Yugoslavia  \n",
       "0                     0.0                        0.0  \n",
       "1                     0.0                        0.0  \n",
       "2                     0.0                        0.0  \n",
       "3                     0.0                        0.0  \n",
       "4                     0.0                        0.0  \n",
       "\n",
       "[5 rows x 108 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Indices of top n low valued samples\n",
    "print('Indices of top ' + str(n_exp) + ' low valued samples: ' + str(sorted_idx[-n_exp:]))\n",
    "pd.DataFrame(data=sorted_x_train[-n_exp:, :], index=range(n_exp), columns=col_names).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Removing high/low valued samples\n",
    "\n",
    "Removing low value samples from the training dataset can improve the predictor model performance, especially in the cases where the training dataset contains corrupted samples. On the other\n",
    "hand, removing high value samples, especially if the dataset is small, would decrease the performance significantly. Overall, the performance after removing high/low value samples is a strong\n",
    "indicator for the quality of data valuation.\n",
    "\n",
    "DVRL can rank the training data samples according to their estimated data value, and **by removing the low value samples we can improve performance, whereas removing the high value samples degrades the performance**.\n",
    " * Train predictive models after removing certain portions of high/low valued training samples.\n",
    " * Visualize the results using line graphs (set plot = True).\n",
    " * x-axis: Portions of removed samples.\n",
    " * y-axis: Prediction performance (accuracy).\n",
    " * Blue line: Removing low value data, Orange line: Removing high value data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x540 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Defines evaluation model\n",
    "eval_model = lightgbm.LGBMClassifier()\n",
    "\n",
    "# Evaluates performances after removing high/low valued samples\n",
    "remove_high_low_performance = remove_high_low(dve_out, eval_model, x_train, y_train, \n",
    "                                              x_valid, y_valid, x_test, y_test, 'accuracy', plot = True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
